package Homes;


import java.util.ArrayList;
import Exceptions.PatenteNoDetectadaException;
import Externos.AnalizadorInfraccionesPagos;
import Aplicacion.Infraccion;
import Aplicacion.Vehiculo;

public class VehiculosHome {

	private ArrayList<Vehiculo> vehiculos;

	private static VehiculosHome instance = null;
	private AnalizadorInfraccionesPagos analizadorInfraccionesPagos;

	private VehiculosHome() {
		this.vehiculos = new ArrayList<Vehiculo>();
	}

	public static void reset() {
		instance = null;
	}

	public static synchronized VehiculosHome getInstance() {
		if (instance == null)
			instance = new VehiculosHome();
		return instance;
	}

	public void addVehiculo(Vehiculo vehiculo) {
		this.vehiculos.add(vehiculo);
	}

	/**
	 * Busca un veh�culo que tenga la patente pasada por par�metro y si no
	 * existe, la agrega a la colecci�n
	 * 
	 * @param patente
	 * @return vehiculo
	 */
	public Vehiculo getVehiculoByPatente(String patente) {

		for (Vehiculo vehiculo : this.vehiculos) {
			if (patente == vehiculo.getPatente()) {
				return vehiculo;
			}
		}
		throw new PatenteNoDetectadaException();
	}
	
	public ArrayList<Vehiculo> getAll(){
		return this.vehiculos;
	}
	
	public void procesarVehiculos(){
		
		for (Vehiculo vehiculo : this.getAll()) {
			
			/* Obtengo las infracciones pagadas para el vehiculo*/
			ArrayList<Infraccion> infraccionesPagadas = analizadorInfraccionesPagos.getInfraccionesPagadas(vehiculo);
								
			vehiculo.pagarInfracciones(infraccionesPagadas);
			vehiculo.validarInfraccionesVencidas();
			vehiculo.procesarDesasignacion();
		}
	}	
	
	public double promedioMultasInvalidadasVehiculo() {		
		int cant = 0;		
		for (Vehiculo vehiculo : this.getAll()) {
			cant += vehiculo.getInfraccionesInvalidadas().size();			
		}
		return cant / this.getAll().size();
	}
	
}
